#ifndef ACCOUNT_SYSTEM_ACCOUNT_H
#define ACCOUNT_SYSTEM_ACCOUNT_H

#include <string>
#include <vector>
#include <memory>
#include "Transaction.h"
using namespace std;
class Account
{
protected:
    string accountId;    // 账户ID
    string ownerName;    // 账户所有者姓名
    double balance;           // 账户余额
    vector<shared_ptr<Transaction>> transactions;  // 交易记录列表

public:
    Account(const string &id, const string &owner, double initialBalance = 0.0);  // 构造函数
    virtual ~Account() = default;  // 虚析构函数

    // 获取器方法
    string getAccountId() const;  // 获取账户ID
    string getOwnerName() const;  // 获取账户所有者姓名
    double getBalance() const;         // 获取账户余额
    const vector<shared_ptr<Transaction>> &getTransactions() const;  // 获取交易记录

    // 纯虚函数方法
    virtual string getAccountType() const = 0;  // 获取账户类型
    virtual bool canDeposit() const = 0;            // 是否可以存款
    virtual bool canWithdraw() const = 0;           // 是否可以取款

    // 交易相关方法
    void addTransaction(const shared_ptr<Transaction> &transaction);  // 添加交易记录
    void updateBalance(double amount);                                    // 更新账户余额

    // 生成报告的实用方法
    virtual void generateAccountReport(const string &filename) const;  // 生成账户报告
};

#endif // ACCOUNT_SYSTEM_ACCOUNT_H